/*
 * drv_gpio.c
 *
 *  Created on: Nov 30, 2022
 *      Author: hongwei_zhu
 */
#include "hal_gpio.h"

void PB15_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB15_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_15);
}
void PB15_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_15);
}
uint8_t PB15_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15);
}
struct gpio_type pb15 = {PB15_init,PB15_set,PB15_reset,PB15_read};

void PB14_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB14_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_14);
}
void PB14_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_14);
}
uint8_t PB14_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14);
}
struct gpio_type pb14 = {PB14_init,PB14_set,PB14_reset,PB14_read};

void PB13_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB13_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_13);
}
void PB13_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_13);
}
uint8_t PB13_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13);
}
struct gpio_type pb13 = {PB13_init,PB13_set,PB13_reset,PB13_read};

//PB12
void PB12_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB12_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_12);
}
void PB12_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_12);
}
uint8_t PB12_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12);
}
struct gpio_type pb12 = {PB12_init,PB12_set,PB12_reset,PB12_read};

//PB8
void PB8_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB8_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_8);
}
void PB8_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_8);
}
uint8_t PB8_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8);
}
struct gpio_type pb8 = {PB8_init,PB8_set,PB8_reset,PB8_read};
//PB7
void PB7_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB7_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_7);
}
void PB7_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_7);
}
uint8_t PB7_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);
}
struct gpio_type pb7 = {PB7_init,PB7_set,PB7_reset,PB7_read};
//PB9
void PB9_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB9_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_9);
}
void PB9_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_9);
}
uint8_t PB9_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9);
}
struct gpio_type pb9 = {PB9_init,PB9_set,PB9_reset,PB9_read};
//PB6
void PB6_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB6_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_6);
}
void PB6_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_6);
}
uint8_t PB6_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6);
}
struct gpio_type pb6 = {PB6_init,PB6_set,PB6_reset,PB6_read};
//PB5
void PB5_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB5_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
void PB5_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
uint8_t PB5_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);
}
struct gpio_type pb5 = {PB5_init,PB5_set,PB5_reset,PB5_read};
//PB4
void PB4_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB4_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_4);
}
void PB4_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_4);
}
uint8_t PB4_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4);
}
struct gpio_type pb4 = {PB4_init,PB4_set,PB4_reset,PB4_read};
//PB3
void PB3_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB3_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_3);
}
void PB3_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_3);
}
uint8_t PB3_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3);
}
struct gpio_type pb3 = {PB3_init,PB3_set,PB3_reset,PB3_read};
//PB1
void PB1_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB1_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_1);
}
void PB1_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_1);
}
uint8_t PB1_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1);
}
struct gpio_type pb1 = {PB1_init,PB1_set,PB1_reset,PB1_read};
//PB0
void PB0_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PB0_set(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_0);
}
void PB0_reset(void)
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_0);
}
uint8_t PB0_read(void)
{
    return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);
}
struct gpio_type pb0 = {PB0_init,PB0_set,PB0_reset,PB0_read};

//PA0
void PA0_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA0_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
void PA0_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}
uint8_t PA0_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
}
struct gpio_type pa0 = {PA0_init,PA0_set,PA0_reset,PA0_read};
//PA1
void PA1_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA1_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
void PA1_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
uint8_t PA1_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);
}
struct gpio_type pa1 = {PA1_init,PA1_set,PA1_reset,PA1_read};
//PA2
void PA2_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA2_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_2);
}
void PA2_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
uint8_t PA2_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);
}
struct gpio_type pa2 = {PA2_init,PA2_set,PA2_reset,PA2_read};
//PA3
void PA3_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA3_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_3);
}
void PA3_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_3);
}
uint8_t PA3_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3);
}
struct gpio_type pa3 = {PA3_init,PA3_set,PA3_reset,PA3_read};
//PA4
void PA4_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA4_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_4);
}
void PA4_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_4);
}
uint8_t PA4_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);
}
struct gpio_type pa4 = {PA4_init,PA4_set,PA4_reset,PA4_read};
//PA5
void PA5_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA5_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_5);
}
void PA5_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_5);
}
uint8_t PA5_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5);
}
struct gpio_type pa5 = {PA5_init,PA5_set,PA5_reset,PA5_read};
//PA6
void PA6_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA6_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_6);
}
void PA6_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_6);
}
uint8_t PA6_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6);
}
struct gpio_type pa6 = {PA6_init,PA6_set,PA6_reset,PA6_read};
//PA7
void PA7_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA7_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_7);
}
void PA7_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_7);
}
uint8_t PA7_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7);
}
struct gpio_type pa7 = {PA7_init,PA7_set,PA7_reset,PA7_read};
//PA8
void PA8_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA8_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_8);
}
void PA8_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_8);
}
uint8_t PA8_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8);
}
struct gpio_type pa8 = {PA8_init,PA8_set,PA8_reset,PA8_read};
//PA9
void PA9_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA9_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_9);
}
void PA9_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_9);
}
uint8_t PA9_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9);
}
struct gpio_type pa9 = {PA9_init,PA9_set,PA9_reset,PA9_read};
//PA10
void PA10_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA10_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_10);
}
void PA10_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_10);
}
uint8_t PA10_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10);
}
struct gpio_type pa10 = {PA10_init,PA10_set,PA10_reset,PA10_read};
//PA13
void PA13_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA13_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_13);
}
void PA13_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_13);
}
uint8_t PA13_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13);
}
struct gpio_type pa13 = {PA13_init,PA13_set,PA13_reset,PA13_read};
//PA14
void PA14_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);

    GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA14_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_14);
}
void PA14_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_14);
}
uint8_t PA14_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_14);
}
struct gpio_type pa14 = {PA14_init,PA14_set,PA14_reset,PA14_read};
//PA15
void PA15_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);

    GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA15_set(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_15);
}
void PA15_reset(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_15);
}
uint8_t PA15_read(void)
{
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15);
}
struct gpio_type pa15 = {PA15_init,PA15_set,PA15_reset,PA15_read};
//PC0
void PC0_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC0_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_0);
}
void PC0_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_0);
}
uint8_t PC0_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0);
}
struct gpio_type pc0 = {PC0_init,PC0_set,PC0_reset,PC0_read};
//PC1
void PC1_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC1_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_1);
}
void PC1_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_1);
}
uint8_t PC1_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1);
}
struct gpio_type pc1 = {PC1_init,PC1_set,PC1_reset,PC1_read};
//PC2
void PC2_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC2_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_2);
}
void PC2_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_2);
}
uint8_t PC2_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2);
}
struct gpio_type pc2 = {PC2_init,PC2_set,PC2_reset,PC2_read};
//PC3
void PC3_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC3_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_3);
}
void PC3_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_3);
}
uint8_t PC3_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3);
}
struct gpio_type pc3 = {PC3_init,PC3_set,PC3_reset,PC3_read};
//PC4
void PC4_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC4_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_4);
}
void PC4_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_4);
}
uint8_t PC4_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4);
}
struct gpio_type pc4 = {PC4_init,PC4_set,PC4_reset,PC4_read};
//PC5
void PC5_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC5_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_5);
}
void PC5_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_5);
}
uint8_t PC5_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5);
}
struct gpio_type pc5 = {PC5_init,PC5_set,PC5_reset,PC5_read};
//PC6
void PC6_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC6_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_6);
}
void PC6_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_6);
}
uint8_t PC6_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6);
}
struct gpio_type pc6 = {PC6_init,PC6_set,PC6_reset,PC6_read};
//PC7
void PC7_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC7_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_7);
}
void PC7_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_7);
}
uint8_t PC7_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7);
}
struct gpio_type pc7 = {PC7_init,PC7_set,PC7_reset,PC7_read};
//PC8
void PC8_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC8_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_8);
}
void PC8_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_8);
}
uint8_t PC8_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8);
}
struct gpio_type pc8= {PC8_init,PC8_set,PC8_reset,PC8_read};
//PC9
void PC9_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC9_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_9);
}
void PC9_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_9);
}
uint8_t PC9_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9);
}
struct gpio_type pc9= {PC9_init,PC9_set,PC9_reset,PC9_read};
//PC10
void PC10_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC10_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_10);
}
void PC10_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_10);
}
uint8_t PC10_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10);
}
struct gpio_type pc10 = {PC10_init,PC10_set,PC10_reset,PC10_read};
//PC11
void PC11_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC11_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_11);
}
void PC11_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_11);
}
uint8_t PC11_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11);
}
struct gpio_type pc11 = {PC11_init,PC11_set,PC11_reset,PC11_read};
//PC12
void PC12_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC12_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_12);
}
void PC12_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_12);
}
uint8_t PC12_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12);
}
struct gpio_type pc12 = {PC12_init,PC12_set,PC12_reset,PC12_read};
//PC13
void PC13_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC13_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_13);
}
void PC13_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
uint8_t PC13_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13);
}
struct gpio_type pc13 = {PC13_init,PC13_set,PC13_reset,PC13_read};
//PC14
void PC14_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC14_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_14);
}
void PC14_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_14);
}
uint8_t PC14_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_14);
}
struct gpio_type pc14 = {PC14_init,PC14_set,PC14_reset,PC14_read};
//PC15
void PC15_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void PC15_set(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_15);
}
void PC15_reset(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_15);
}
uint8_t PC15_read(void)
{
    return GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15);
}
struct gpio_type pc15 = {PC15_init,PC15_set,PC15_reset,PC15_read};
//PD2
void PD2_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void PD2_set(void)
{
    GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
void PD2_reset(void)
{
    GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}
uint8_t PD2_read(void)
{
    return GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_2);
}
struct gpio_type pd2 = {PD2_init,PD2_set,PD2_reset,PD2_read};
//PD3
void PD3_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void PD3_set(void)
{
    GPIO_SetBits(GPIOD,GPIO_Pin_3);
}
void PD3_reset(void)
{
    GPIO_ResetBits(GPIOD,GPIO_Pin_3);
}
uint8_t PD3_read(void)
{
    return GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_3);
}
struct gpio_type pd3 = {PD3_init,PD3_set,PD3_reset,PD3_read};
//PD4
void PD4_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void PD4_set(void)
{
    GPIO_SetBits(GPIOD,GPIO_Pin_4);
}
void PD4_reset(void)
{
    GPIO_ResetBits(GPIOD,GPIO_Pin_4);
}
uint8_t PD4_read(void)
{
    return GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_4);
}
struct gpio_type pd4 = {PD4_init,PD4_set,PD4_reset,PD4_read};

//PD6
void PD6_init(uint32_t mode)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void PD6_set(void)
{
    GPIO_SetBits(GPIOD,GPIO_Pin_6);
}
void PD6_reset(void)
{
    GPIO_ResetBits(GPIOD,GPIO_Pin_6);
}
uint8_t PD6_read(void)
{
    return GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6);
}
struct gpio_type pd6 = {PD6_init,PD6_set,PD6_reset,PD6_read};
